<script>

//concat() 方法用于合并两个或多个数组。此方法不会更改现有数组，而是返回一个新数组。
const concatArray = [1,2,3].concat([4,5,6])
console.log(concatArray);//expected output [1, 2, 3, 4, 5, 6]


//fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。
const array1 = [1, 2, 3, 4];
console.log(array1.fill('0', 2, 4));// expected output: [1, 2, '0', '0']


// /filter() 方法创建一个新数组, 
//其包含通过所提供函数实现的测试的所有元素(如无通过元素则返回空数组)。 
//此方法不会更改现有数组
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);


// /find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
const findarray1 = [5, 12, 8, 130, 44];
const found = findarray1.find(element => element > 10);


//forEach() 方法对数组的每个元素执行一次给定的函数。
// const array1 = ['a', 'b', 'c'];
// array1.forEach(element => console.log(element));


// /Array.from() 方法从一个类似数组或可迭代对象创建一个新的，浅拷贝的数组实例。
console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]


//includes() 方法用来判断一个数组是否包含一个指定的值，根据情况，如果包含则返回 true，否则返回false。


//indexOf()方法返回在数组中可以找到一个给定元素的第一个索引，如果不存在，则返回-1
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));// expected output: 1



//lastIndexOf() 方法返回指定元素（也即有效的 JavaScript 值或变量）在数组中的最后一个的索引，如果不存在则返回 -1。从数组的后面向前查找，从 fromIndex 处开始。
const animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo'];
console.log(animals.lastIndexOf('Dodo'));// expected output: 3



//Array.isArray() 用于确定传递的值是否是一个 Array。



//join() 方法将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目，那么将返回该项目而不使用分隔符。
console.log(['a','b'].join(','));



//map() 方法创建一个新数组，其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
// const array1 = [1, 4, 9, 16];
// // pass a function to map
// const map1 = array1.map(x => x * 2);
// console.log(map1);
// // expected output: Array [2, 8, 18, 32]




//pop()方法从数组中删除最后一个元素，并返回该元素的值。此方法更改数组的长度。
const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop());// expected output: "tomato
//shift() 方法从数组中删除第一个元素，并返回该元素的值。此方法更改数组的长度。



//push() 方法将一个或多个元素添加到数组的末尾，并返回该数组的新长度
//unshift() 方法将一个或多个元素添加到数组的开头，并返回该数组的新长度(该方法修改原有数组)。


//reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行)，将其结果汇总为单个返回值。
// const array1 = [1, 2, 3, 4];
// const reducer = (accumulator, currentValue) => accumulator + currentValue;



//reverse() 方法将数组中元素的位置颠倒，并返回该数组。数组的第一个元素会变成最后一个，数组的最后一个元素变成第一个。该方法会改变原数组。
let reverseArray =  ['one', 'two', 'three'].reverse();
console.log(reverseArray);



// /slice() 方法返回一个新的数组对象，这一对象是一个由 begin 和 end 决定的原数组的浅拷贝（包括 begin，不包括end）。原始数组不会被改变。
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]




//some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值。



//sort() 方法用原地算法对数组的元素进行排序，并返回数组。默认排序顺序是在将元素转换为字符串，然后比较它们的UTF-16代码单元值序列时构建的
const months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]



//splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
//如果是切割数组，则不包括终止索引
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]




//toString() 返回一个字符串，表示指定的数组及其元素。
const array1 = [1, 2, 'a', '1a'];
console.log(array1.toString());
// expected output: "1,2,a,1a"






/*
改变原数组
push()
pop() 删除最后一个元素
shift() 删除第一个元素
unshift()将一个或多个元素添加到数组的开头
splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组
sort() 方法用原地算法对数组的元素进行排序
reverse() 将数组中元素的位置颠倒
forEach()
*/


/*
不改变原数组返回新数组
filter()
concat() 
slice()
map()
*/






</script>